// 需求：计算购物车数据中，被勾选商品的总价
main() {
  // 购物车数据
  List<Map> goodsList = [
    {
      "id": 1,
      "price": 22.68,
      "count": 3,
      "goods_name": "西瓜",
      "selectd": true,
    },
    {
      "id": 2,
      "price": 11.99,
      "count": 3,
      "goods_name": "草莓",
      "selectd": true,
    },
    {
      "id": 3,
      "price": 60.99,
      "count": 1,
      "goods_name": "车厘子",
      "selectd": false,
    },
    {
      "id": 4,
      "price": 11.68,
      "count": 3,
      "goods_name": "平谷大桃",
      "selectd": false,
    }
  ];

  // // 1.1 计算选中商品的总金额
  // double totalPrice = 0;
  // for (int i = 0; i < goodsList.length; i++) {
  //   // 是否选中
  //   if (goodsList[i]['selectd']) {
  //     // 计算选中商品的金额
  //     totalPrice += goodsList[i]['price'] * goodsList[i]['count'];
  //   }
  // }
  // // 1.2. 打印选中商品的总金额
  // print('1.2.选中商品的总金额为：${totalPrice.toStringAsFixed(2)}');

  // // 2.1 for in 循环
  // double totalPrice = 0;
  // for (var item in goodsList) {
  //   // 是否选中
  //   if (item['selectd']) {
  //     // 计算选中商品的金额
  //     totalPrice += item['price'] * item['count'];
  //   }
  // }
  // // 2.2 打印选中商品的总金额
  // print('2.2选中商品的总金额为：${totalPrice.toStringAsFixed(2)}');

  // // 3.1 forEach 循环遍历
  // double totalPrice = 0;
  // goodsList.forEach((item) {
  //   if (item['selectd']) {
  //     totalPrice += item['price'] * item['count'];
  //   }
  // });
  // // 3.2 打印选中商品的总金额
  // print('3.2.选中商品的总金额为：${totalPrice.toStringAsFixed(2)}');

  // // 4.1 reduce 方法，会把第一项作为初始值（不适合当前场景）
  // List<num> list = [1, 2, 3, 4, 5];
  // num totalPrice = list.reduce((value, element) {
  //   return value + element;
  // });
  // // 4.2 打印选中商品的总金额
  // print('4.2.选中商品的总金额为：${totalPrice}');

  // // 5.1 fold 方法，可以自定义初始值，适合当前购物车场景
  // double totalPrice = goodsList.fold(0, (value, item) {
  //   if (item['selectd']) {
  //     return value + item['price'] * item['count'];
  //   }
  //   return value;
  // });
  // // 5.2 打印选中商品的总金额
  // print('5.2.选中商品的总金额为：${totalPrice.toStringAsFixed(2)}');

  // 6.1 筛选选中商品  where 相当于鸿蒙的 filter
  List<Map> selectedList = goodsList.where((item) => item['selectd']).toList();
  print('6.1.选中的商品个数：${selectedList.length}');
  // 6.2 计算选中商品的总价格    fold 相当于鸿蒙的 reduce
  double totalPrice = selectedList.fold(
      0, (value, item) => value + item['price'] * item['count']);
  print('6.2.选中商品的总金额为：${totalPrice.toStringAsFixed(2)}');
}
